24-2 仵袕Bz

我們使用下列這個範例,來說明 WSH 對於檔案的讀寫。首先我們從 file1.txt 及 file2.txt 讀入檔案的內容,再把這兩個檔案的內容寫到 file3.txt,範例如下:

原始檔(mergeTwoFiles.js):(灰色區域按兩下即可拷貝)
// 合併兩個檔案

fso = new ActiveXObject("Scripting.FileSystemObject");
file1 = "file1.txt";
file2 = "file2.txt";
file3 = "file3.txt";

// Open files
f1=fso.OpenTextFile(file1, 1 );	// Open for reading  
f2=fso.OpenTextFile(file2, 1 );	// Open for reading  
f3=fso.OpenTextFile(file3, 2, true );	// Open for writing, create  

WScript.Echo("讀取第一個檔案:" + file1);
c1=f1.ReadAll();
WScript.Echo("讀取第二個檔案:" + file2);
c2=f2.ReadAll();
WScript.Echo("寫到第三個檔案:" + file3);
f3.Write(c1);	// Write Data from first file to output
f3.Write(c2);	// Write Data from second file to output

// Close files  
f1.Close();
f2.Close();
f3.Close();

其中 file1.txt 的內容如下:

原始檔(file1.txt):(灰色區域按兩下即可拷貝)
這是 file1.txt 的內容。

其中 file2.txt 的內容如下:

原始檔(file2.txt):(灰色區域按兩下即可拷貝)
這是 file2.txt 的內容。

合併後儲存於 file3.txt 的內容如下:

原始檔(file3.txt):(灰色區域按兩下即可拷貝)
這是 file1.txt 的內容。這是 file2.txt 的內容。

如果我們常常讀取檔案,可以寫一個函數 fileRead(),將檔案內容送到陣列,便於進行逐列的處理。以下是一個簡單的範例,可以讀入此範例本身,逐列加上列數後再進行輸出:

原始檔(fileRead01.js):(灰色區域按兩下即可拷貝)
// 將檔案內容傳送至陣列
WScript.Echo("列出 "+WScript.ScriptName+" 的內容並加上列數:");
WScript.Echo("");
outputArray=fileRead(WScript.ScriptName);
for (i=0; i<outputArray.length; i++)
	WScript.Echo((i+1)+". " + outputArray[i]);

// 函數定義
function fileRead(File){
	var fso=new ActiveXObject("Scripting.FileSystemObject");
	var fid=fso.OpenTextFile(File);
	var contents=fid.ReadAll();
	fid.Close();
	var output=contents.split("\n");
	return(output);
}

執行此檔案後,將在 DOS 命令視窗印出此檔案的內容並加入列數,如下:

列出 fileRead01.js 的內容並加上列數: 1. // 將檔案內容傳送至陣列 2. WScript.Echo("列出 "+WScript.ScriptName+" 的內容並加上列數:"); 3. WScript.Echo(""); 4. outputArray=fileRead(WScript.ScriptName); 5. for (i=0; i<outputArray.length; i++) 6. WScript.Echo((i+1)+". " + outputArray[i]); 7. 8. // 函數定義 9. function fileRead(File){ 10. var fso=new ActiveXObject("Scripting.FileSystemObject"); 11. var fid=fso.OpenTextFile(File); 12. var contents=fid.ReadAll(); 13. fid.Close(); 14. var output=contents.split("\n"); 15. return(output); 16. } 我們可以使用 WSH 來讀取與檔案相關的性質,例如:

原始檔(fileProp01.js):(灰色區域按兩下即可拷貝)
// 列出此 WSH 檔案所具有的屬性

fso = new ActiveXObject( "Scripting.FileSystemObject" );
fileObj = fso.GetFile(WScript.ScriptFullName);
WScript.Echo("WScript.ScriptFullName = " + WScript.ScriptFullName);
prop=[
	"Attributes",
	"Size",
	"DateCreated",
	"DateLastAccessed",
	"DateLastModified",
	"Drive",
	"Name",
	"ParentFolder",
	"ShortName",
	"ShortPath",
	"Type"];

for (i=0; i<prop.length; i++)
	WScript.Echo("fileObj." + prop[i] + " = " + eval("fileObj."+prop[i]));

典型顯示結果如下:

WScript.ScriptFullName = D:\users\jang\books\wsh\example\fileProp01.js fileObj.Attributes = 32 fileObj.Size = 504 fileObj.DateCreated = Tue Apr 11 19:59:05 UTC+0800 2006 fileObj.DateLastAccessed = Mon Dec 18 00:00:00 UTC+0800 2006 fileObj.DateLastModified = Mon Dec 18 14:40:08 UTC+0800 2006 fileObj.Drive = D: fileObj.Name = fileProp01.js fileObj.ParentFolder = D:\users\jang\books\wsh\example fileObj.ShortName = FILEPR~1.JS fileObj.ShortPath = D:\users\jang\books\wsh\example\FILEPR~1.JS fileObj.Type = JScript Script File

Hint
但如何能自動由一個檔案物件抓取所有的性質呢?請各位讀者想一想!


JScript 程式設計與應用:用於單機的 WSH 環境